import os
import time
from selenium.webdriver.support.wait import WebDriverWait
from base.get_logger import GetLogger
from page import URL

#获取log日志器
log = GetLogger().get_logger()

class Base:
    def __init__(self,driver):
        log.info("[base]:正在获取初始化driver对象:{}".format(driver))
        self.driver = driver
    #查找元素方法封装
    def base_find(self,loc,timeout=30,poll=0.5):
        log.info("[base]:正在定位:{}元素，默认定位超时时间：{}".format(loc,timeout))
        #使用显示等待 查找元素
        return WebDriverWait(self.driver,
                             timeout=timeout,
                             poll_frequency=poll).until(lambda x:x.find_element(*loc))
    #点击元素方法封装
    def base_click(self,loc):
        log.info("[base]:正在对元素:{}进行点击操作".format(loc))
        self.base_find(loc).click()
    #输入元素方法封装
    def base_input(self,loc,value):
        log.info("[base]:正在查找元素:{}".format(loc))
        el = self.base_find(loc)
        #清空元素
        log.info("[base]:正在对元素:{}，进行清空操作".format(loc))
        el.clear()
        #输入元素
        log.info("[base]:正在对元素:{}，输入值:{}".format(loc, value))
        el.send_keys(value)
    #获取文本信息方法封装
    def base_get_txt(self,loc):
        log.info("[base]:正在获取元素:{}的文本信息".format(loc))
        return self.base_find(loc).text
    #截图方法封装
    def base_get_image(self):
        log.info("[base]:断言出错，调用截图")
        # self.driver.save_screenshot("./image/{}.png".format(time.strftime("%Y-%m-%d_%H-%M-%S")))
        self.driver.get_screenshot_as_file("./image/{}.png".format(time.strftime("%Y-%m-%d_%H-%M-%S")))

    #判断元素是否存在方法封装
    def base_elment_is_exist(self,loc):
        try:
            self.base_find(loc,timeout=10)
            log.info("[base]:{}元素查找成功，存在页面".format(loc))
            return True #代表元素存在
        except:
            log.info("[base]:{}元素查找失败，不在当前页面".format(loc))
            return False#代表元素不存在

    #回到首页（购物车、下订单、支付）都需要
    def base_index(self):
        log.info("[base]:回到首页")
        # self.driver.get(URL)
        self.base_click(self)
    #切换fram表单方法
    def base_switch_fram(self,name):
        log.info("[base]:切换表单")
        self.driver.switch_to.fram(name)
    #回到主目录
    def base_default_content(self):
        log.info("[base]:回到主目录")
        self.driver.switch_to.default_content()